package main

import (
	"golearnpro/pc/config"
	"golearnpro/pc/eng"
	"golearnpro/pc/engs"
	"golearnpro/pc/persists"
	"golearnpro/pc/schdule"
	"golearnpro/pc/zhenai/parser"
)

/**
爬虫总入口
知识点
网络爬虫的分类
1、通用爬虫 baidu google 这种爬虫是爬取下来以后建立索引 索引指向真实页面 用户在百度 谷歌 搜索是存在缓存中的关键字 然后用户点击索引到真是页。
   爬取的关键字存在缓存中这也就是修改关键字为甚不能时时录入因为爬虫是定时爬取进缓存的。存储的是之前存取的备份（爬虫爬的） 进 缓存 磁盘
   并不是真实互联网
2、聚焦爬虫、从互联网获取结构化数据 它们是爬取特定网站特定内容的爬虫 结构化存取。 只获取有价值的数据。

项目的总体结构

市面有的爬虫库
henrylee2cn/pholus
colly
gocrawl
hu17889/go_spider

数据存储 elasticSearch

htmltemplate 前端

主题
爬取人


// 单任务改造并发版
1、fether parser 部分engine的代码  合并为一个worker


// request 和 worker 都放到队列里面去

// 去重复
redis

// 如何存储？
抽象task概念 可以抽象出fetchworker peristworker
go func(){itemChan<-item} 然后去保存 itemChan 送给 itemServer 去保存


elastic-search
elastic stack 需要学习
直接
docker
客户端  命令行
后面还有个守护进程 server
docker info
docker Registry: https://index.docker.io/v1/ 拉镜像的
本地 没有镜像 就去远端去拉 太慢了需要切换源
daocloud.io/mirror
加速
daocloud.io/mirror网页下面有不同平台的配置 https://blog.csdn.net/ycc297876771/article/details/89960686 mac https://www.jianshu.com/p/419eaf4425a6

流程
如果本地没有镜像->拉去pull->建容器安装->运行

// 最小的操作系统linux
docker run -it alpine sh
docker images 查看镜像
docker run -d -p 80:80 nginx 守护进程在后台一直执行 里面的80映射到外边80
docker kill ps 的id


docker run  -d -p 9200:9200 elasticsearch  // 需要把库保存到宿主机否则起来就清库了

docker logs id

idea post 或者 postman
Tools -> http client -> test restful
header 设置 Content-Type:application/json
查询GET
增加用 put POST path index/type/id  index库  type表  id 就是id 内容选择Text 写json

GET查询 path同上面
path index/type/_search 获取所有的内容 id 相同会覆盖
hits 是命中 id 相同直接就覆盖了

request parameters
传入参数  pretty 就写个名字就是好看的打印 q=你要模糊搜索的内容
英文要是完整的单词因为type是按照单词建立的索引  所以中文支持的不好

request body 在 GET的必须去掉

// put 写入  post 更新记录

// 访问 <server>:9200/index/type/id

id 不写新增自动生成

/index/type/mapping 同_search 但是不能有个q了
中文需要加ik 插件  更好的分词

注意只有使用post的才可以省略id







*/
func main() {
	//lib.GetAllUserList()
	//lib.GetCityParse("https://www.zhenai.com/zhenghun")
	//eng.SimpleEng{}.Run(engs.Request{
	//	Url:        config.Confs.ZhenAi,
	//	ParserFunc: parser.GetCity,
	//})

	s := &eng.Concurrent{
		Schedule:    &schdule.QueueSchdule{},
		WorderCount: 10,
		ItemChan:    persists.ItemServer(),
	}
	s.Run(engs.Request{
		Url:        config.Confs.ZhenAi,
		ParserFunc: parser.GetCity,
	})
}
